﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Procesos;
using System.Windows.Threading;
using System.Threading;
using Utilidades;
using Modelo;
namespace Interfaz
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        int nroIntentos ;
        int minutos;
        bool prendido;
        DateTime UltimaFechaDeCambioConstraseña;
        DateTime HoraEntrada;
        DateTime HoraSalida;
        string LogEntrada;
        string usuarioEntrada = "";
        bool VerificarSiHuboCambio=true;
        public MainWindow()
        {
            InitializeComponent();
            LogEntrada = "LOGS/EntradaUsuario.txt";
            //nroIntentos = 0;
            //minutos = ControlSistema.getTiempoBloqueada();
            prendido = true;
            //if(minutos!=0)
            //dispatcherTimer.Start();
            Archivo.bloquear("LOGS");
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

        }
        
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            VerificarSiHuboCambio = true;
            try
            {
                
                nroIntentos++;
                if (nroIntentos > 6)
                {
                    //minutos = 30;
                    ControlSistema.Bloquear(usuarioEntrada);
                    //dispatcherTimer.Start();
                    Archivo.Escribir("SISTEMA BLOQUEADO", "LOGS/SistemaBloqueado.txt", usuarioEntrada,"LOGS");
                    Archivo.Escribir("SISTEMA BLOQUEADO", LogEntrada, usuarioEntrada, "LOGS");
                    labelError.Content = "Cuenta bloqueada";
                    nroIntentos = 0;
                }
                else
                {
                    usuarioEntrada= textBoxUsuario.Text;
                    string cont = EncriptorAES.Encriptar(textBoxContrasena.Password);
                    Archivo.Escribir("Se intentó acceder al sistema", LogEntrada, usuarioEntrada,"LOGS");
                    ControlSistema.EstaBloqueado(usuarioEntrada);
                    Usuario usuario = ControlUsuario.AutentificarUsuario(usuarioEntrada, cont);
                    
                    if (usuario != null)
                    Actual.Instance.llenarDatos(usuario);
                                        
                    DateTime HoraDeIntento = DateTime.Now;
                    HoraEntrada = Procesos.ControlUsuario.GetHoraEntrada(usuario);
                    HoraSalida = Procesos.ControlUsuario.GetHoraSalida(usuario);
                    if (ValidarEntrada(HoraDeIntento, HoraEntrada, HoraSalida) || usuario.Cargo == "Administrador" || usuario.Cargo =="Super")
                    {
                        UltimaFechaDeCambioConstraseña = ControlUsuario.GetUltimaFecha(usuario);
                        int anio = UltimaFechaDeCambioConstraseña.Year;
                        int mes = UltimaFechaDeCambioConstraseña.Month;
                        int dia = UltimaFechaDeCambioConstraseña.Day;
                        DateTime ultimo = new DateTime(anio, mes, dia).AddMonths(6);
                        DateTime actual = DateTime.Now.Date;
                        string contrasenaAnt = Actual.Instance.GetContrasena();
                        if (actual == ultimo)
                        {
                            VerificarSiHuboCambio = false;
                            VentanaCambioContrasena cambiar = new VentanaCambioContrasena();
                            cambiar.ShowDialog();
                            if (contrasenaAnt != Actual.Instance.GetContrasena())
                                VerificarSiHuboCambio = true;
                        }
                        if (VerificarSiHuboCambio)
                        {
                            if (usuario.Cargo == "Empleado")
                            {
                                Archivo.Escribir("Se ingresó al sistema", LogEntrada, usuarioEntrada, "LOGS");

                                InicioEmpleado inicio = new InicioEmpleado(usuario);
                                this.Close();
                                inicio.ShowDialog();


                            }
                            else if (usuario.Cargo == "Administrador")
                            {
                                InicioAdmin inicio = new InicioAdmin(usuario);
                                this.Close();
                                inicio.ShowDialog();
                            }
                            else if (usuario.Cargo == "Super")
                            {
                                Inicio_Super super = new Inicio_Super(usuario);
                                this.Close();
                                super.ShowDialog();
                            }
                            else
                            {
                                Nuevo nuevo = new Nuevo(usuario);
                                this.Close();
                                nuevo.Show();
                            }
                        }
                        
                        else
                        {
                            MessageBox.Show("Debe cambiar la contraseña anterior no puede entrar al sistema", "Error");
                        }
                    }
                    else
                    {
                        MessageBox.Show("No puede acceder al sistema espere su horario", "Error");
                        textBoxUsuario.Text = "";
                        textBoxContrasena.Password = "";                       
                    }                    
                }
            }
            catch (Exception ex)
            {
                labelError.Content = ex.Message;
                Archivo.Escribir("Se mandó un mensaje de error: "+ex.Message+" en la ventana de Log in",LogEntrada,"","LOGS");
            }
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            
        }

        private void Window_Closed(object sender, EventArgs e)
        {
            prendido = false;
        }
        bool ValidarEntrada(DateTime intento, DateTime entrada, DateTime salida)
        {            
            DateTime inte=new DateTime(2012,12,12,intento.Hour,intento.Minute,intento.Second);
            DateTime entra=new DateTime(2012,12,12,entrada.Hour,entrada.Minute,entrada.Second);
            DateTime sale = new DateTime(2012, 12, 12, salida.Hour, salida.Minute, salida.Second);
            if(inte.CompareTo(entra)>=0 && inte.CompareTo(sale)<=0)
            {
                return true;
            }
            return false;
        }
    }
}
